fix(ai): 종합 패널 생성 실패가 피드백 전체를 삼키지 않도록 격리 - #143
Merged
Merged
Conversation
feedback_consumer.handle()의 top-level asyncio.gather 에서 자기소개/ 직무적합도/인성/답변코칭은 각자 예외를 삼키는데 종합 패널(generate())만 그러지 않아, 패널이 예상 못 한 이유로 실패하면 gather 전체가 취소되고 피드백 콜백 자체가 발행되지 않는 문제가 있었음. _generate_panel 래퍼로 감싸 실패 시 빈 FeedbackResult로 대체 — 나머지 4개 결과는 살리고 피드백 발행은 항상 이어지게 함. 회귀 테스트 1건 추가.
2 tasks
i3months
added a commit
to i3months/stackup
that referenced
this pull request
Aug 28, 2026
dev 배포가 PR Team-StackUp#144 부터 4회 연속 실패했다. 원인은 백엔드 Docker 빌드: Exception in thread "main" java.io.IOException: Downloading from https://services.gradle.org/distributions/gradle-9.4.0-bin.zip failed: timeout (10000ms) 베이스 이미지가 gradle:8.12-jdk21 인데 wrapper 는 9.4.0 을 요구해서, 매 빌드마다 배포판(약 130MB)을 새로 내려받고 있었다. self-hosted runner 에서 services.gradle.org 접속이 타임아웃돼(wrapper 기본 10s) 실패한다. 재시도해도 27초만에 같은 지점에서 죽어 일시적 문제가 아니었다. Team-StackUp#143 까지 성공한 건 그 PR 들이 backend/ 를 건드리지 않아 Docker 레이어 캐시가 살아있었기 때문이다. Team-StackUp#144 에서 backend 소스가 바뀌자 캐시가 깨지고 증상이 드러났다. 수정: 베이스 이미지를 gradle:9.4.0-jdk21 로 올리고 wrapper 대신 이미지에 들어있는 gradle 을 쓴다 → 네트워크 의존이 사라진다. 태그는 gradle-wrapper.properties 의 버전과 정확히 맞췄다(9.4-jdk21 은 9.4.1 로 해석돼 로컬과 어긋난다). 의존성 해결을 별도 레이어로 분리해 소스만 바뀔 때 재다운로드도 건너뛴다. wrapper 의 networkTimeout 은 10s → 120s. Docker 빌드와는 무관해졌지만 로컬에서 ./gradlew 로 빌드할 때의 여유를 둔다. 검증: 로컬에서 docker build 성공(BUILD SUCCESSFUL, 배포판 다운로드 없음), ./gradlew --version 도 9.4.0 으로 이미지와 일치.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
feedback_consumer.handle()의 top-levelasyncio.gather에서 자기소개/직무적합도/인성/답변코칭 4개는 각자 내부에서 예외를 삼키는데, 종합 패널(generate())만 그러지 않아 패널이 예상 못 한 이유로 실패하면gather전체가 취소되고 피드백 콜백 자체가 발행되지 않는 문제가 있었음_generate_panel래퍼로 감싸 실패 시 빈FeedbackResult(weaknesses_summary에 실패 안내)로 대체 — 나머지 4개 부가 평가 결과는 살리고 피드백 발행 자체는 항상 이어지게 함Test plan
uv run pytest전체 316개 통과 (신규 1건: 패널 생성 실패 시에도 콜백이 발행되는지)black --check,flake8클린ai/CLAUDE.md§16에 이번 변경 반영